Disk drives are commonly used in workstations, personal computers, laptops and other computer systems to store large amounts of data in a form that can be made readily available to the user. In general, the disk drive includes a magnetic disk that is rotated by a spindle motor. The surface of the disk is divided into a series of data tracks. The data tracks are spaced radially from one another across a band having an inner diameter and an outer diameter. Each of the data tracks extends generally circumferentially around the disk and can store data in the form of magnetic transitions within the radial extent of the track on the A disk surface. Typically, each data track is divided into a number of data sectors that can store fixed sized data blocks.
A head includes an interactive element, such a magnetic transducer, that is used to sense the magnetic transitions to read data or used to conduct an electronic signal that causes a transducer to write data to the data surface.
The magnetic transducer positioned with the active elements of this transducer as a position suitable for interaction with the magnetic transitions on the surface of the disk as the disk rotates. This positioning is performed with an actuator arm.
Typically, the head transmits the magnetic transitions in the form of the electrical signal to a preamplifier which in turn amplifies the signal and transmits the signal to a read channel. These read channels typically include a Phase Locked Loop (PLL) and an Automatic Gain Control (AGC) circuit. These types of systems require Run Length Limited (RLL) encoding. The RLL code does not allow sequences of data that can cause the PLL/AGC to lose a timing lock. A RLL code enforces a limit on the number of consecutive ones (111) and/or zeros (000) allowed to occur in the stream of data. Additionally, these RLL codes (or modulation codes) may also be used to prevent other problems from occurring that arise because of a particular head/media combination. For example, some tape drive products require dc free codes. The term RLL is used to broadly define any transformation of the original data into a form that the storage system can utilize effectively. The efficiency of the RLL code is measured in terms of a code rate. For every user byte/word of data (m bits), an encoded word (n bits) is written to the storage media. In all RLL codes, n&gt;m and the code rate is equal to m/n. Code rates in the current storage products range from 1/2 to 16/17 . The most efficient code rate used in storage products today is 16/17 that is 94.12% efficient. This efficiency is insufficient for future storage product needs and consequently a more efficient system is required.
Typically, one use of the RLL encoding is to prevent long sequences (runs) of zeros or ones from occurring in the data written to the storage media. The long sequences are removed by first utilizing a code word of length greater than the data word (n&gt;m), then carefully choosing a subset from the n bit words so that the RLL requirements are met. These requirements are known as (d,k) constraints. The d constraint indicates how closely transitions (ones in NRZI) are allowed to be spaced. The k constraint indicates how far apart transitions can be spaced (zeros in NRZI). In PRML devices, there is an additional constraint (k1) on the number of transitions (ones in NRZI) allowed to occur in a row. There are theoretical limits on the code rate achievable with these schemes which is a function of the RLL constraints (d,k) and k1.
When user data (for this discussion, user data can be considered random data) are written without RLL encoding, the occurrence of long runs of zeros or ones is rare. Therefore, the RLL codes introduce inefficiency when applied to random data sequences. If the user data is not random, for instance a fixed pattern of zeros, then the RLL code is required. In many storage systems today, a data scrambler is employed to eliminate these fixed pattern effects. The scrambler effectively randomizes the data. If the user data is only encoded or altered when there is a need to enforce an RLL constraint, then the effective code rate or system efficiency may be greatly increased.
FIG. 7 illustrates both user bits and channel bits. The read channel encodes user bits into encoded bits. This usually involves some overhead because, as shown, with a 2/3 rate RLL two user bits are translated into three encoded bits during the same time period. The encoded channel bit has a shorter duration than the user bits. The size of each encoded channel bit or cell is reduced to accommodate the additional channel bits. It is desirable to maintain the cell size of the channel bit to that of the user bits.